/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package constant;

import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author 乐山
 */
public class CourseDB {

    private static HashMap<String, Double> basicECMap;
    private static HashMap<String, Double> specialECMap;
    private static HashMap<String, Double> specialRCMap;

    /**
     * 根据courseStr与credits、cte来初始化basicECMap、specialECMap、specialRCMap
     *
     * @param courseStr
     * @param credits
     * @param cte
     */
    private static void init(String courseStr, Double[] credits, CourseTypeEnum cte) {
        String[] split = courseStr.split(" ");
        if (split.length != credits.length) {
            throw new IllegalArgumentException("学分个数与课程个数不符");
        }
        HashMap<String, Double> tempMap = new HashMap<>();

        for (int i = 0; i < split.length; i++) {
            tempMap.put(split[i], credits[i]);
        }
        switch (cte) {
            case BASICEC:
                basicECMap = tempMap;
                break;
            case SPECIALEC:
                specialECMap = tempMap;
                break;
            case SPECIALRC:
                specialRCMap = tempMap;
                break;
            default:
                throw new AssertionError();
        }
        
    }

    static {
        String becStr = "JAVA程序设计 现代密码学(双语) 算法设计与分析 C++程序设计";
        Double[] becCredits = {4.0, 3.0, 3.0, 3.0};
        String secStr = "高级网络技术 接入网技术 Web编程技术 软件工程 无线网络技术 "
                + "移动应用开发技术 脚本语言编程 网络工程设计：以系统集成方法 "
                + "物联网技术导论 网络攻防 人工智能 嵌入式系统应用 虚拟化与云计算 "
                + "Oracle数据库 网络多媒体技术";
        Double[] secCredits = {3.0, 2.0, 3.0, 2.5, 2.0,
            2.5, 2.5, 2.5,
            1.5, 2.5, 3.0, 2.5, 2.5,
            2.5, 1.5};
        String srcStr = "计算机网络 数据结构 数字逻辑 网络技术基础 计算机组成原理"
                + " 网络管理 数据库原理 操作系统 Linux系统与网络管理 "
                + "TCP/IP协议分析与编程 网络信息安全(英文)";
        Double[] srcCredits = {3.0, 4.5, 3.0, 2.0, 3.5,
            2.5, 3.5, 3.0, 3.5,
            3.5, 3.0};
        //分别初始化基础选修、专业选修与专业必修
        init(becStr, becCredits, CourseTypeEnum.BASICEC);
        init(secStr, secCredits, CourseTypeEnum.SPECIALEC);
        init(srcStr, srcCredits, CourseTypeEnum.SPECIALRC);
    }

    public static Map<String, Double> getBasicECMap() {
        return (Map<String, Double>)basicECMap.clone();
    }

    public static Map<String, Double> getSpecialECMap() {
        return (Map<String, Double>)specialECMap.clone();
    }

    public static Map<String, Double> getSpecialRCMap() {
        return (Map<String, Double>)specialRCMap.clone();
    }
    
    
}
